import { AttachmentResponse } from './attachmentResponse';
import { BaseResponse } from './baseResponse';
import { PasswordHistoryResponse } from './passwordHistoryResponse';

import { CardApi } from '../api/cardApi';
import { FieldApi } from '../api/fieldApi';
import { IdentityApi } from '../api/identityApi';
import { LoginApi } from '../api/loginApi';
import { SecureNoteApi } from '../api/secureNoteApi';

export class CipherResponse extends BaseResponse {
    id: string;
    organizationId: string;
    folderId: string;
    type: number;
    name: string;
    notes: string;
    fields: FieldApi[];
    login: LoginApi;
    card: CardApi;
    identity: IdentityApi;
    secureNote: SecureNoteApi;
    favorite: boolean;
    edit: boolean;
    organizationUseTotp: boolean;
    revisionDate: string;
    attachments: AttachmentResponse[];
    passwordHistory: PasswordHistoryResponse[];
    collectionIds: string[];

    constructor(response: any) {
        super(response);
        this.id = this.getResponseProperty('Id');
        this.organizationId = this.getResponseProperty('OrganizationId');
        this.folderId = this.getResponseProperty('FolderId') || null;
        this.type = this.getResponseProperty('Type');
        this.name = this.getResponseProperty('Name');
        this.notes = this.getResponseProperty('Notes');
        this.favorite = this.getResponseProperty('Favorite') || false;
        this.edit = this.getResponseProperty('Edit') || true;
        this.organizationUseTotp = this.getResponseProperty('OrganizationUseTotp');
        this.revisionDate = this.getResponseProperty('RevisionDate');
        this.collectionIds = this.getResponseProperty('CollectionIds');

        const login = this.getResponseProperty('Login');
        if (login != null) {
            this.login = new LoginApi(login);
        }

        const card = this.getResponseProperty('Card');
        if (card != null) {
            this.card = new CardApi(card);
        }

        const identity = this.getResponseProperty('Identity');
        if (identity != null) {
            this.identity = new IdentityApi(identity);
        }

        const secureNote = this.getResponseProperty('SecureNote');
        if (secureNote != null) {
            this.secureNote = new SecureNoteApi(secureNote);
        }

        const fields = this.getResponseProperty('Fields');
        if (fields != null) {
            this.fields = fields.map((f: any) => new FieldApi(f));
        }

        const attachments = this.getResponseProperty('Attachments');
        if (attachments != null) {
            this.attachments = attachments.map((a: any) => new AttachmentResponse(a));
        }

        const passwordHistory = this.getResponseProperty('PasswordHistory');
        if (passwordHistory != null) {
            this.passwordHistory = passwordHistory.map((h: any) => new PasswordHistoryResponse(h));
        }
    }
}
